package cn.tedu.innerclass;
/*本类用于测试成员内部类被static修饰*/
public class TestInner3 {
    public static void main(String[] args) {
        //4.访问内部类的资源
        //方式1:创建普通内部类对象使用内部类的资源
        //Outer3.Inner3 oi3 = new Outer3().new Inner3();//new Outer()里面的new Inner()
        //oi3.show();
        //方式2:创建匿名对象使用内部类的资源
        //new Outer3().new Inner3().show();

        /*现象:当内部类被static修饰以后,new Outer3()报错*/
        //6.用static修饰内部类以后,上面的创建语句报错,注释掉
        //通过外部类名创建内部类对象
        Outer3.Inner3 oi = new Outer3.Inner3();//Inner3()是无参构造//静态类可以直接通过调用类名,调用相应的静态资源
        oi.show();
        new Outer3.Inner3().show();//(不给对象,起名字调用static内部类资源)利用没有new的Inner3()构造方法,创建匿名对象

        //8.调用静态内部类的静态方法--链式加载//静态方法:直接用类名调用,,,
        Outer3.Inner3.show2(); //极少使用,开机初始化游戏账户,占资源?!
        //System.out.println(Outer3.Inner3.i);//无法调用
        System.out.println(Outer3.Inner3.str);//java外部类名内部名.调用静态方法或属性,

    }
}

//1.创建外部类
class Outer3{
    //2.创建成员内部类
    //5.测试成员内部类被静态修饰
    public void Outer(){

    }
    static class Inner3{

        int i = 1;
        static String str = "java延长";

        public void Inner3(){

        }

        //3.定义普通方法
        public void show(){
            System.out.println("内部类...show()");
        }
        //7.定义静态方法
        public static void show2(){
            System.out.println("我是静态内部类的静态方法");
        }
    }
}